// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()


var crypto = require('crypto')

class WXBizDataCrypt{
  constructor(appId, sessionKey) {
    this.appId = appId
    this.sessionKey = sessionKey
  }
  decryptData(encryptedData, iv){
    // base64 decode
    var sessionKey = new Buffer(this.sessionKey, 'base64')
    encryptedData = new Buffer(encryptedData, 'base64')
    iv = new Buffer(iv, 'base64')

    try {
      // 解密
      var decipher = crypto.createDecipheriv('aes-128-cbc', sessionKey, iv)
      // 设置自动 padding 为 true，删除填充补位
      decipher.setAutoPadding(true)
      var decoded = decipher.update(encryptedData, 'binary', 'utf8')
      decoded += decipher.final('utf8')

      decoded = JSON.parse(decoded)

    } catch (err) {
      throw new Error('Illegal Buffer')
    }

    if (decoded.watermark.appid !== this.appId) {
      throw new Error('Illegal Buffer')
    }

    return decoded
  }
}

// 云函数入口函数
exports.main = async (event, context) => {

  var appId = 'wx553fbf4a5b9c4d73'
  var sessionKey = event.session_key
  var encryptedData = event.encryptedData
  var iv = event.iv
  var pc = new WXBizDataCrypt(appId, sessionKey)
  return pc.decryptData(encryptedData, iv)
}